class Solution {
public:
int longestConsecutive(vector<int>& nums) {
  if (nums.size() == 0) return 0;
  if (nums.size() == 1) return 1;
  set<int> ms;
  for (auto num : nums) {
    ms.insert(num);
  }
  if(ms.size() == 1) return 1;
  //获得了一个有序的集合
  //在有序的集合里面不断的找断开的点 利用断开的点进行判断
  int idx = 0;
  auto it = ms.begin();
  auto it2 = ms.begin();
  it2++;
  int res = 0;
  int x = 0;
  while (it != ms.end() && it2 != ms.end()) {
    if (*it2 - *it != 1) {
      if (res == 0)
        res = idx + 1;
      else {
        res = max(res, idx - x);
      }
      x = idx;
    }
    it++;
    it2++;
    idx++;
  }
  //到这导致还剩下一个元素需要判断 看看这个元素是不是和上一个元素连续
  //如果连续的话 那就让在判断一下 不连续的话 就在当前idx判断
  it--;
  it2--;
  if (*it2 - *it == 1) {
    if (res == 0)
      res = idx - x + 1;
    else
      res = max(res, idx - x);
  } else {
    res = max(res, idx - x - 1);
  }
  return res;
}
};
